package com.gzx.plugin.tjzy.modular.call.pre.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.gzx.plugin.tjzy.modular.call.pre.bo.GzxPreOutCallAddBo;
import com.gzx.plugin.tjzy.modular.call.pre.bo.GzxPreOutCallDeleteBo;
import com.gzx.plugin.tjzy.modular.call.pre.bo.GzxPreOutCallQueryBo;
import com.gzx.plugin.tjzy.modular.call.pre.entity.GzxPreOutCallDetail;
import com.gzx.plugin.tjzy.modular.call.pre.vo.GzxPreCallBusinessVo;
import com.gzx.plugin.tjzy.modular.call.pre.vo.GzxPreOutCallDetailVo;
import com.gzx.plugin.tjzy.modular.call.pre.vo.GzxPreOutCallVo;
import org.springframework.web.multipart.MultipartFile;
import vip.xiaonuo.common.pojo.CommonResult;

import java.io.IOException;
import java.util.List;
import java.util.Set;

/**
 * @author zjt
 * @description
 * @since 2024/11/8 15:45
 */
public interface GzxPreOutCallService {

    /**
     * 删除预测外呼
     */
    String deletePreOutCall(GzxPreOutCallDeleteBo bo);

    /**
     * 预测外呼导入
     *
     * @param preOutCallAddBo
     * @param file
     * @return
     * @throws IOException
     */
    String agentImportExcel(GzxPreOutCallAddBo preOutCallAddBo, MultipartFile file) throws IOException;

    /**
     * 预测外呼数据主管导入
     *
     * @param preOutCallAddBo
     * @param file
     * @return
     * @throws IOException
     */
    String adminImportExcel(GzxPreOutCallAddBo preOutCallAddBo, MultipartFile file) throws IOException;

    /**
     * 分页查询预测外呼数据
     *
     * @param preOutCallQueryBo
     * @return
     */
    Page<GzxPreOutCallVo> pageList(GzxPreOutCallQueryBo preOutCallQueryBo);

    /**
     * 获取预测外呼明细
     *
     * @param preOutCallQueryBo
     * @return
     */
    Page<GzxPreOutCallDetailVo> pageDetail(GzxPreOutCallQueryBo preOutCallQueryBo);

    /**
     * 根据明细ID获取预测外呼明细详情
     *
     * @param id
     * @return
     */
    GzxPreOutCallDetailVo getPreOutCallDetailById(Long id);

    /**
     * 获取批次下接听的数量
     *
     * @param batchNumber
     * @param filterType
     * @return
     */
    int getCallCount(String batchNumber, Integer filterType);

    /**
     * 开始任务
     *
     * @param batchNumber
     */
    CommonResult<String> startCallTask(String batchNumber);

    /**
     * 暂停预测外呼任务
     *
     * @param batchNumber
     */
    CommonResult<String> closeCallTask(String batchNumber);

    /**
     * 继续预测外呼任务
     *
     * @param batchNumber
     */
    CommonResult<String> continueCallTask(String batchNumber);

    /**
     * 完成预测外呼任务
     */
    void finishCallTask(String batchNumber);

    /**
     * 更换主叫
     *
     * @param batchNumber
     */
    void changeCallee(String batchNumber, String caller);

    /**
     * 获取预测外呼明细数据
     *
     * @param id
     * @return
     */
    GzxPreCallBusinessVo getPreCallBusinessById(Long id);

    /**
     * 测试预测外呼参数
     *
     * @param batchNumber
     */
    void testCallParam(String batchNumber);

    /**
     * 更新预测外呼批次信息
     *
     * @param batchNumber
     */
    void updatePreOutBatch(String batchNumber);

    /**
     * 根据预测外呼明细ID获取预测外呼明细
     *
     * @param idList
     * @return
     */
    List<GzxPreOutCallDetail> selectBatchIds(Set<String> idList);

    /**
     * 批量修改预测外呼明细
     *
     * @param preOutCallDetailList
     */
    void updateBatchByDetailId(List<GzxPreOutCallDetail> preOutCallDetailList);

    /**
     * 补偿预测外呼数据
     */
    void offsetPreOutDetailJobHandler();

    /**
     * 调整预测外呼主表已完成数量
     */
    void adjustCompleted();

    /**
     * 复制预测外呼明细
     *
     * @param preOutCallAddBo
     */
    String copyPreOutCallDetail(GzxPreOutCallAddBo preOutCallAddBo);

    /**
     * 关闭异常任务
     *
     * @param taskId
     */
    void closeErrorTask(String taskId);
}
